#include<bits/stdc++.h>
using namespace std;
const int N=105;

int n,m;
int c[N];
int u[N];
int in[N];
int out[N];
vector<int> edges[N];
vector<int> outnum;

int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&c[i],&u[i]);
    }
    memset(in,0,sizeof(in));
    memset(out,0,sizeof(out));
    for(int i=1;i<=m;i++)
    {
        int s,t,w;
        scanf("%d%d%d",&s,&t,&w);
        edges[s].emplace_back(t);
        edges[s].emplace_back(w);
        in[t]++;
        out[s]++;
    }
    //输出层
    for(int i=1;i<=n;i++)
    {
        if(out[i]==0){
            outnum.emplace_back(i);
        }
    }
    //
    queue<int> que;
    for(int i=1;i<=n;i++)
    {
        if(in[i]==0) {
            que.push(i);
        }
    }

    while(!que.empty())
    {
        int size=que.size();
        for(int i=0;i<size;i++)
        {
            int s=que.front();
            que.pop();
            for(int j=0;j<edges[s].size();j+=2)
            {
                int t=edges[s][j];
                int w=edges[s][j+1];
                c[t]+=w*c[s];
                in[t]--;
                if(in[t]==0)
                {
                    c[t]-=u[t];
                    if(c[t]>0) que.push(t);
                }
            }
        }
    }
    int sum=0;
    for(auto num:outnum)
    {
        if(c[num]>0)
        {
            printf("%d %d\n",num,c[num]);
            sum++;
        }
    }
    if(sum==0) printf("NULL");
    return 0;
}